package server

import (
	"net/http"
	"os"
	"path/filepath"

	"github.com/gin-gonic/gin"
)

// StaticHandler 静态文件处理器
type StaticHandler struct {
	WebDir string
}

// NewStaticHandler 创建新的静态文件处理器
func NewStaticHandler(webDir string) *StaticHandler {
	// 如果目录不存在，创建目录
	if _, err := os.Stat(webDir); os.IsNotExist(err) {
		os.MkdirAll(webDir, 0755)
	}

	return &StaticHandler{
		WebDir: webDir,
	}
}

// RegisterRoutes 注册静态文件路由
func (h *StaticHandler) RegisterRoutes(engine *gin.Engine) {
	// 静态文件服务
	engine.Static("/static", filepath.Join(h.WebDir, "static"))

	// 首页
	engine.GET("/", func(c *gin.Context) {
		c.File(filepath.Join(h.WebDir, "index.html"))
	})

	// 其他HTML文件
	engine.GET("/index.html", func(c *gin.Context) {
		c.File(filepath.Join(h.WebDir, "index.html"))
	})

	// 图标
	engine.StaticFile("/favicon.ico", filepath.Join(h.WebDir, "favicon.ico"))
}

// ServeFile 提供文件服务
func (h *StaticHandler) ServeFile(c *gin.Context, filename string) {
	filePath := filepath.Join(h.WebDir, filename)

	// 检查文件是否存在
	if _, err := os.Stat(filePath); os.IsNotExist(err) {
		c.String(http.StatusNotFound, "File not found")
		return
	}

	// 提供文件
	c.File(filePath)
}
